import fs from 'node:fs';
import { program } from 'commander';

import packageJson from '../package.json' assert { type: 'json' };
import PathHelper from './utils/PathHelper';

const run = async () => {
  const commandsPath = './commands';
  const commandFiles = fs.readdirSync(PathHelper.getPathRelativeToDistSrc(commandsPath));
  for await (const commandFile of commandFiles) {
    await import(PathHelper.getPathRelativeToDistSrc(commandsPath, commandFile));
  }

  // 当 argv 仅有两个参数（即执行 cli 命令时没有携带任何参数）时，
  // program.parse(process.argv) 会抛出异常，直接终止程序的运行。
  // cli 命令没有参数时加上 --help 来打印帮助文档
  const programAvg = process.argv.length === 2 ? [...process.argv, '--help'] : process.argv;

  program
    .version(packageJson.version, '-v, --version', '输出版本信息')
    .name('cns-cli')
    .usage('<command> [options]')
    .helpOption('-h, --help', '输出帮助文档')
    .parse(programAvg);
};

try {
  run();
} catch (error) {
  console.error(error);
}
